package com.ybg.base.util;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/** 把一个list集合,里面的bean含有 parentId 转为树形式 */
public class TreeUtil {
	
	/** 根据父节点的ID获取所有子节点
	 * 
	 * @param list
	 *            分类表
	 * @param typeId
	 *            传入的父节点ID
	 * @return String */
	public List<TreeVO> getChildTreeObjects(List<TreeVO> list, String praentId) {
		List<TreeVO> returnList = new ArrayList<TreeVO>();
		for (Iterator<TreeVO> iterator = list.iterator(); iterator.hasNext();) {
			TreeVO t = (TreeVO) iterator.next();
			// 一、根据传入的某个父节点ID,遍历该父节点的所有子节点
			if (t.getParentId().equals(praentId)) {
				recursionFn(list, t);
				returnList.add(t);
			}
		}
		return returnList;
	}
	
	/** 递归列表
	 * 
	 * @author lanyuan Email: mmm333zzz520@163.com
	 * @date 2013-12-4 下午7:27:30
	 * @param list
	 * @param TreeVO */
	private void recursionFn(List<TreeVO> list, TreeVO t) {
		List<TreeVO> childList = getChildList(list, t);// 得到子节点列表
		t.setChildren(childList);
		for (TreeVO tChild : childList) {
			if (hasChild(list, tChild)) {// 判断是否有子节点
				// returnList.add(TreeObject);
				Iterator<TreeVO> it = childList.iterator();
				while (it.hasNext()) {
					TreeVO n = (TreeVO) it.next();
					recursionFn(list, n);
				}
			}
		}
	}
	
	// 得到子节点列表
	private List<TreeVO> getChildList(List<TreeVO> list, TreeVO t) {
		List<TreeVO> tlist = new ArrayList<TreeVO>();
		Iterator<TreeVO> it = list.iterator();
		while (it.hasNext()) {
			TreeVO n = (TreeVO) it.next();
			if (n.getParentId().equals(t.getId())) {
				tlist.add(n);
			}
		}
		return tlist;
	}
	
	List<TreeVO> returnList = new ArrayList<TreeVO>();
	// /** 根据父节点的ID获取所有子节点
	// *
	// * @param list
	// * 分类表
	// * @param typeId
	// * 传入的父节点ID
	// * @param prefix
	// * 子节点前缀 */
	// public List<TreeObject> getChildTreeObjects(List<TreeObject> list, String
	// typeId, String prefix) {
	// if (list == null)
	// return null;
	// System.out.println("81:"+list.size()+typeId+prefix);
	// for (Iterator<TreeObject> iterator = list.iterator();
	// iterator.hasNext();) {
	// TreeObject node = (TreeObject) iterator.next();
	// // 一、根据传入的某个父节点ID,遍历该父节点的所有子节点
	// System.out.println("85:"+typeId);
	// if (node.getParentId() .equals(typeId) ) {
	// recursionFn(list, node, prefix);
	// }
	// // 二、遍历所有的父节点下的所有子节点
	// /*
	// * if (node.getParentId()==0) { recursionFn(list, node); }
	// */
	// }
	// return returnList;
	// }
	// private void recursionFn(List<TreeObject> list, TreeObject node, String
	// p) {
	// List<TreeObject> childList = getChildList(list, node);// 得到子节点列表
	// if (hasChild(list, node)) {// 判断是否有子节点
	// returnList.add(node);
	// Iterator<TreeObject> it = childList.iterator();
	// while (it.hasNext()) {
	// TreeObject n = (TreeObject) it.next();
	// n.setName(p + n.getName());
	// recursionFn(list, n, p + p);
	// }
	// }
	// else {
	// returnList.add(node);
	// }
	// }
	
	// 判断是否有子节点
	private boolean hasChild(List<TreeVO> list, TreeVO t) {
		return getChildList(list, t).size() > 0 ? true : false;
	}
	
	// 本地模拟数据测试
	public void main(String[] args) {
		/*
		 * long start = System.currentTimeMillis(); List<TreeObject> TreeObjectList = new ArrayList<TreeObject>();
		 * 
		 * TreeObjectUtil mt = new TreeObjectUtil(); List<TreeObject> ns=mt.getChildTreeObjects(TreeObjectList,0); for (TreeObject m : ns) { System.out.println(m.getName()); System.out.pr ln(m.getChildren()); } long end = System.currentTimeMillis(); System.out.println("用时:" + (end - start) + "ms");
		 */
	}
}
